package xyz.xmh.pattern.creational.prototypepattern;

import java.util.HashMap;
import java.util.Map;

/**
 * ShapeCache<br/>
 * 形状缓存类，需要使用的对象的时候生成缓存对象的克隆
 *
 * @author xuMingHai
 * @since 2021/4/29 星期四 16:52
 */
public class ShapeCache {


    /**
     * 放置图形对象的缓存
     */
    private static final Map<String, Shape> SHAPE_CACHE = new HashMap<>();

    /**
     * 加载缓存，将图形对象放在集合中
     */
    public static void loadCache() {
        Rectangle rectangle = new Rectangle();
        rectangle.setId("1");
        SHAPE_CACHE.put(rectangle.getId(), rectangle);

        Circle circle = new Circle();
        circle.setId("2");
        SHAPE_CACHE.put(circle.getId(), circle);

        Square square = new Square();
        square.setId("3");
        SHAPE_CACHE.put(square.getId(), square);

    }

    /**
     * 返回缓存中对象的克隆
     *
     * @param id 对象的ID
     * @return ID对应的具体对象
     */
    public static Shape getShape(String id) {
        Shape shape = SHAPE_CACHE.get(id);
        // 获得这个对象的克隆对象
        return (Shape) shape.clone();
    }
}
